using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;

namespace amcolumn
{
    public partial class _export : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Form["width"] != null && Request.Form["width"] != String.Empty)
            {
                // image dimensions
                int width = Int32.Parse((Request.Form["width"].IndexOf('.') != -1) ? Request.Form["width"].Substring(0, Request.Form["width"].IndexOf('.')) : Request.Form["width"]);
                int height = Int32.Parse((Request.Form["height"].IndexOf('.') != -1) ? Request.Form["height"].Substring(0, Request.Form["height"].IndexOf('.')) : Request.Form["height"]);

                // image
                Bitmap result = new Bitmap(width, height);

                // set pixel colors
                for (int y = 0; y < height; y++)
                {
                    // column counter for the row
                    int x = 0;
                    // get current row data
                    string[] row = Request.Form["r" + y].Split(new char[] { ',' });
                    // set pixels in the row
                    for (int c = 0; c < row.Length; c++)
                    {
                        // get pixel color and repeat count
                        string[] pixel = row[c].Split(new char[] { ':' });
                        Color current_color = ColorTranslator.FromHtml("#" + pixel[0]);
                        int repeat = pixel.Length > 1 ? Int32.Parse(pixel[1]) : 1;

                        // set pixel(s)
                        for (int l = 0; l < repeat; l++)
                        {
                            result.SetPixel(x, y, current_color);
                            x++;
                        }
                    }
                }

                // output image

                // image type
                Response.ContentType = "image/jpeg";
                Response.AddHeader("Content-Disposition", "attachment; filename=\"amchart.jpg\"");

                // find image encoder for selected type
                ImageCodecInfo[] encoders;
                ImageCodecInfo img_encoder = null;
                encoders = ImageCodecInfo.GetImageEncoders();
                foreach (ImageCodecInfo codec in encoders)
                    if (codec.MimeType == Response.ContentType)
                    {
                        img_encoder = codec;
                        break;
                    }

                // image parameters
                EncoderParameter jpeg_quality = new EncoderParameter(Encoder.Quality, 100L); // for jpeg images only
                EncoderParameters enc_params = new EncoderParameters(1);
                enc_params.Param[0] = jpeg_quality;

                result.Save(Response.OutputStream, img_encoder, enc_params);
            }
            else
            {
                // invalid post
                Response.Write("Invalid post");
            }
        }
    }
}
